summaryrefslogtreecommitdiff
path: root/app/[lng]
diff options
context:
space:
mode:
Diffstat (limited to 'app/[lng]')
-rw-r--r--app/[lng]/evcp/(evcp)/vendor-regular-registrations/page.tsx6
-rw-r--r--app/[lng]/partners/(partners)/document-list-only/[contractId]/page.tsx21
-rw-r--r--app/[lng]/partners/(partners)/document-list-only/page.tsx16
-rw-r--r--app/[lng]/partners/(partners)/document-list/page.tsx16
-rw-r--r--app/[lng]/partners/(partners)/registration-status/page.tsx24
-rw-r--r--app/[lng]/partners/(partners)/vendor-data/layout.tsx7
-rw-r--r--app/[lng]/partners/(partners)/vendor-data/page.tsx9
7 files changed, 72 insertions, 27 deletions
diff --git a/app/[lng]/evcp/(evcp)/vendor-regular-registrations/page.tsx b/app/[lng]/evcp/(evcp)/vendor-regular-registrations/page.tsx
index 2260396c..e8433c55 100644
--- a/app/[lng]/evcp/(evcp)/vendor-regular-registrations/page.tsx
+++ b/app/[lng]/evcp/(evcp)/vendor-regular-registrations/page.tsx
@@ -1,5 +1,7 @@
import * as React from "react"
+export const dynamic = "force-dynamic"
+
import { Skeleton } from "@/components/ui/skeleton"
import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"
@@ -27,9 +29,9 @@ export default async function VendorRegularRegistrationsPage() {
</h2>
<InformationButton pagePath="evcp/vendor-regular-registrations" />
</div>
- <p className="text-muted-foreground">
+ {/* <p className="text-muted-foreground">
정규업체 등록 현황을 확인하세요. 구매담당자가 정규업체 등록을 위한 현황 조회 및 협력업체에게 누락자료 요청하는 화면입니다.
- </p>
+ </p> */}
</div>
</div>
</div>
diff --git a/app/[lng]/partners/(partners)/document-list-only/[contractId]/page.tsx b/app/[lng]/partners/(partners)/document-list-only/[contractId]/page.tsx
index e3cda9b4..7c38d5cf 100644
--- a/app/[lng]/partners/(partners)/document-list-only/[contractId]/page.tsx
+++ b/app/[lng]/partners/(partners)/document-list-only/[contractId]/page.tsx
@@ -6,6 +6,7 @@ import { type SearchParams } from "@/types/table"
import { getValidFilters } from "@/lib/data-table"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
import { Progress } from "@/components/ui/progress"
+import { useTranslation } from "@/i18n"
import {
TrendingUp,
AlertTriangle,
@@ -22,6 +23,7 @@ import { getDocumentProgressStats, getDocumentStagesOnly } from "@/lib/vendor-do
interface DocumentStagesManagementPageProps {
params: {
+ lng?: string
contractId: string
}
searchParams: Promise<SearchParams>
@@ -29,14 +31,15 @@ interface DocumentStagesManagementPageProps {
// 전체 진행률 카드 컴포넌트
-async function ProgressCard({ contractId }: { contractId: number }) {
+async function ProgressCard({ contractId, lng }: { contractId: number, lng: string }) {
const stats = await getDocumentProgressStats(contractId)
+ const { t } = await useTranslation(lng, 'engineering')
return (
<Card>
<CardHeader>
<div className="flex items-center justify-between">
- <CardTitle className="text-lg">전체 진행률</CardTitle>
+ <CardTitle className="text-lg">{t('vendorDocuments.progress.overallProgress')}</CardTitle>
<div className="flex items-center gap-2">
</div>
</div>
@@ -44,7 +47,7 @@ async function ProgressCard({ contractId }: { contractId: number }) {
<CardContent>
<div className="space-y-4">
<div className="flex justify-between text-sm">
- <span>평균 진행률</span>
+ <span>{t('vendorDocuments.progress.averageProgress')}</span>
<span className="font-medium">{stats.avgProgress}%</span>
</div>
<Progress value={stats.avgProgress} className="w-full" />
@@ -52,19 +55,19 @@ async function ProgressCard({ contractId }: { contractId: number }) {
<div className="grid grid-cols-2 md:grid-cols-4 gap-4 text-sm">
<div className="text-center p-2 bg-gray-50 rounded">
<div className="font-medium text-lg text-gray-900">{stats.totalDocuments}</div>
- <div className="text-gray-600">전체</div>
+ <div className="text-gray-600">{t('vendorDocuments.progress.total')}</div>
</div>
<div className="text-center p-2 bg-green-50 rounded">
<div className="font-medium text-lg text-green-600">{stats.completedDocuments}</div>
- <div className="text-green-600">완료</div>
+ <div className="text-green-600">{t('vendorDocuments.progress.completed')}</div>
</div>
<div className="text-center p-2 bg-blue-50 rounded">
<div className="font-medium text-lg text-blue-600">{stats.inProgressDocuments}</div>
- <div className="text-blue-600">진행중</div>
+ <div className="text-blue-600">{t('vendorDocuments.progress.inProgress')}</div>
</div>
<div className="text-center p-2 bg-red-50 rounded">
<div className="font-medium text-lg text-red-600">{stats.overdueDocuments}</div>
- <div className="text-red-600">지연</div>
+ <div className="text-red-600">{t('vendorDocuments.progress.overdue')}</div>
</div>
</div>
</div>
@@ -139,14 +142,16 @@ export default async function DocumentStagesManagementPage({
searchParams
}: DocumentStagesManagementPageProps) {
const resolvedParams = await params
+ const lng = resolvedParams?.lng || 'ko'
const contractId = Number(resolvedParams.contractId)
const resolvedSearchParams = await searchParams
+ const { t } = await useTranslation(lng, 'engineering')
// 프로젝트 타입 결정 (실제로는 계약 정보에서 가져와야 함)
const projectType = resolvedSearchParams.projectType === "plant" ? "plant" : "ship"
if (isNaN(contractId)) {
- throw new Error("유효하지 않은 계약 ID입니다")
+ throw new Error(t('vendorDocuments.errors.invalidContractId'))
}
return (
diff --git a/app/[lng]/partners/(partners)/document-list-only/page.tsx b/app/[lng]/partners/(partners)/document-list-only/page.tsx
index 721eb408..fe7cf47a 100644
--- a/app/[lng]/partners/(partners)/document-list-only/page.tsx
+++ b/app/[lng]/partners/(partners)/document-list-only/page.tsx
@@ -1,18 +1,24 @@
// app/vendor-data/page.tsx
import * as React from "react"
import { Separator } from "@/components/ui/separator"
+import { useTranslation } from "@/i18n"
-export default async function IndexPage() {
+interface Props {
+ params: { lng?: string }
+}
+
+export default async function IndexPage({ params }: Props) {
+ const { lng } = await params
+ const language = lng || 'ko'
+ const { t } = await useTranslation(language, 'engineering')
return (
<div className="space-y-6">
<div className="grid gap-4">
<div className="rounded-lg border p-4">
- <h4 className="text-sm font-medium">시작하는 방법</h4>
+ <h4 className="text-sm font-medium">{t('vendorDocuments.gettingStarted.title')}</h4>
<p className="text-sm text-muted-foreground mt-1">
- 오른쪽 상단에서 프로젝트/계약을 선택하세요.<br />
-
-
+ {t('vendorDocuments.gettingStarted.selectProject')}
</p>
</div>
</div>
diff --git a/app/[lng]/partners/(partners)/document-list/page.tsx b/app/[lng]/partners/(partners)/document-list/page.tsx
index 721eb408..fe7cf47a 100644
--- a/app/[lng]/partners/(partners)/document-list/page.tsx
+++ b/app/[lng]/partners/(partners)/document-list/page.tsx
@@ -1,18 +1,24 @@
// app/vendor-data/page.tsx
import * as React from "react"
import { Separator } from "@/components/ui/separator"
+import { useTranslation } from "@/i18n"
-export default async function IndexPage() {
+interface Props {
+ params: { lng?: string }
+}
+
+export default async function IndexPage({ params }: Props) {
+ const { lng } = await params
+ const language = lng || 'ko'
+ const { t } = await useTranslation(language, 'engineering')
return (
<div className="space-y-6">
<div className="grid gap-4">
<div className="rounded-lg border p-4">
- <h4 className="text-sm font-medium">시작하는 방법</h4>
+ <h4 className="text-sm font-medium">{t('vendorDocuments.gettingStarted.title')}</h4>
<p className="text-sm text-muted-foreground mt-1">
- 오른쪽 상단에서 프로젝트/계약을 선택하세요.<br />
-
-
+ {t('vendorDocuments.gettingStarted.selectProject')}
</p>
</div>
</div>
diff --git a/app/[lng]/partners/(partners)/registration-status/page.tsx b/app/[lng]/partners/(partners)/registration-status/page.tsx
new file mode 100644
index 00000000..21bcea59
--- /dev/null
+++ b/app/[lng]/partners/(partners)/registration-status/page.tsx
@@ -0,0 +1,24 @@
+import * as React from "react"
+import { Suspense } from "react"
+
+import { Skeleton } from "@/components/ui/skeleton"
+import { Shell } from "@/components/shell"
+import { VendorRegistrationStatusView } from "@/lib/vendor-registration-status/vendor-registration-status-view"
+
+export default async function VendorRegistrationStatusPage() {
+ return (
+ <Shell className="gap-4">
+ <Suspense
+ fallback={
+ <div className="space-y-4">
+ <Skeleton className="h-10 w-full" />
+ <Skeleton className="h-64 w-full" />
+ <Skeleton className="h-32 w-full" />
+ </div>
+ }
+ >
+ <VendorRegistrationStatusView />
+ </Suspense>
+ </Shell>
+ )
+}
diff --git a/app/[lng]/partners/(partners)/vendor-data/layout.tsx b/app/[lng]/partners/(partners)/vendor-data/layout.tsx
index 9621d23f..c37a983a 100644
--- a/app/[lng]/partners/(partners)/vendor-data/layout.tsx
+++ b/app/[lng]/partners/(partners)/vendor-data/layout.tsx
@@ -11,7 +11,7 @@ import { useTranslation } from "@/i18n"
interface VendorDataLayoutProps {
children: React.ReactNode
- params?: { locale?: string }
+ params: { lng?: string }
}
// Layout 컴포넌트는 서버 컴포넌트입니다
@@ -20,8 +20,9 @@ export default async function VendorDataLayout({
params,
}: VendorDataLayoutProps) {
// 기본 언어는 'ko'로 설정, params.locale이 있으면 사용
- const lng = params?.locale || 'ko'
- const { t } = await useTranslation(lng, 'engineering')
+ const { lng } = await params;
+ const language = lng || 'en'
+ const { t } = await useTranslation(language, 'engineering')
const session = await getServerSession(authOptions)
const vendorId = session?.user.companyId
diff --git a/app/[lng]/partners/(partners)/vendor-data/page.tsx b/app/[lng]/partners/(partners)/vendor-data/page.tsx
index db032377..0fbb6f0a 100644
--- a/app/[lng]/partners/(partners)/vendor-data/page.tsx
+++ b/app/[lng]/partners/(partners)/vendor-data/page.tsx
@@ -3,13 +3,14 @@ import { Separator } from "@/components/ui/separator"
import { useTranslation } from "@/i18n"
interface Props {
- params: { locale?: string }
+ params: { lng?: string }
}
export default async function VendorDataPage({ params }: Props) {
- // 기본 언어는 'ko'로 설정, params.locale이 있으면 사용
- const lng = params?.locale || 'ko'
- const { t } = await useTranslation(lng, 'engineering')
+ // 기본 언어는 'ko'로 설정, params.lng이 있으면 사용
+ const { lng } = await params
+ const language = lng || 'en'
+ const { t } = await useTranslation(language, 'engineering')
return (
<div className="space-y-6">